package minauth

var role = NewRole("user")
var defaultRoles = NewRoles().AddRole(role)

func GetDefaultRole() *Role {
	return role
}

func GetDefaultRoles() *Roles {
	return defaultRoles
}

func AddRole(role *Role) {
	defaultRoles.AddRole(role)
}

type Roles struct {
	Home  string //默认首页
	roles map[string]*Role
}

// 创建角色组
func NewRoles() *Roles {
	m := new(Roles)
	return m
}

func (m *Roles) GetHome() string {
	return m.Home
}

// 添加角色
func (m *Roles) AddRole(role *Role) *Roles {
	if m.roles == nil {
		m.roles = make(map[string]*Role)
	}
	if m.Home == "" {
		m.Home = role.Home
	}
	// 检查角色是否已存在
	if _, ok := m.roles[role.Name]; ok {
		return m
	}
	m.roles[role.Name] = role
	return m
}

// 检查路径是否在角色组中
func (m *Roles) CheckPath(path string) bool {
	for _, role := range m.roles {
		if role.CheckPath(path) {
			return true
		}
	}
	return false
}

type Role struct {
	Name    string //角色名
	Level   int    //级别
	Alias   string //别名
	Remark  string //备注
	Home    string //首页
	mapPath map[string]bool
}

// 创建角色
func NewRole(name string) *Role {
	m := new(Role)
	m.Name = name
	m.mapPath = make(map[string]bool)
	return m
}

// 设置角色首页
func (m *Role) SetHome(home string) *Role {
	m.Home = home
	return m
}

// 添加路径
func (m *Role) AddPath(path string) {
	// 检查路径是否已存在
	if _, ok := m.mapPath[path]; ok {
		return
	}
	m.mapPath[path] = true
}

// 检查路径是否在角色中
func (m *Role) CheckPath(path string) bool {
	return m.mapPath[path]
}
